package mx.gob.imss.reiman.clientes.model;

import java.util.ArrayList;
import java.util.List;

//TODO: 
public class LabUpdate {
	private String NUM_FOLIO_ORDEN = "";
	private String FECHA_HORA_ATENCION = "";
	private String APELLIDOP_ACTUALIZA = "";
	private String APELLIDOM_ACTUALIZA = "";
	private String NOMBRE_ACTUALIZA = "";
	private String MAT_ACTUALIZA = "";
	private String MOTIVO_ACT = "";
	private String FECHA_HORA_REG_ACT = "";
	private String cveIdee = "";
	private String CVE_PRESUPUESTAL = "";
	private String CVE_SERV_CONTRATADO = "";
	private String ID_APLICACION = "";
	private String RFC_PROVEEDOR = "";
	private String TIPO_MENSAJE = "";
	private String NUM_CONTRATO = "";
	private List<String> errores = new ArrayList<String>();
	private List<Estudio> estudios = new ArrayList<Estudio>();
	private Integer selectedComponent = 0;
	private List<Integer> idsEstudios = new ArrayList<Integer>();
	private List<Prueba> pruebas = new ArrayList<Prueba>();
	private int seqEstudios = 0;

	public String getNUM_FOLIO_ORDEN() {
		return NUM_FOLIO_ORDEN;
	}

	public void setNUM_FOLIO_ORDEN(String nUMFOLIOORDEN) {
		NUM_FOLIO_ORDEN = nUMFOLIOORDEN;
	}

	public String getAPELLIDOP_ACTUALIZA() {
		return APELLIDOP_ACTUALIZA;
	}

	public void setAPELLIDOP_ACTUALIZA(String aPELLIDOPACTUALIZA) {
		APELLIDOP_ACTUALIZA = aPELLIDOPACTUALIZA;
	}

	public String getAPELLIDOM_ACTUALIZA() {
		return APELLIDOM_ACTUALIZA;
	}

	public void setAPELLIDOM_ACTUALIZA(String aPELLIDOMACTUALIZA) {
		APELLIDOM_ACTUALIZA = aPELLIDOMACTUALIZA;
	}

	public String getNOMBRE_ACTUALIZA() {
		return NOMBRE_ACTUALIZA;
	}

	public void setNOMBRE_ACTUALIZA(String nOMBREACTUALIZA) {
		NOMBRE_ACTUALIZA = nOMBREACTUALIZA;
	}

	public String getMAT_ACTUALIZA() {
		return MAT_ACTUALIZA;
	}

	public void setMAT_ACTUALIZA(String mATACTUALIZA) {
		MAT_ACTUALIZA = mATACTUALIZA;
	}

	public String getMOTIVO_ACT() {
		return MOTIVO_ACT;
	}

	public void setMOTIVO_ACT(String mOTIVOACT) {
		MOTIVO_ACT = mOTIVOACT;
	}

	public String getFECHA_HORA_REG_ACT() {
		return FECHA_HORA_REG_ACT;
	}

	public void setFECHA_HORA_REG_ACT(String fECHAHORAREGACT) {
		FECHA_HORA_REG_ACT = fECHAHORAREGACT;
	}

	public String getCveIdee() {
		return cveIdee;
	}

	public void setCveIdee(String cveIdee) {
		this.cveIdee = cveIdee;
	}

	public String getCVE_PRESUPUESTAL() {
		return CVE_PRESUPUESTAL;
	}

	public void setCVE_PRESUPUESTAL(String cVEPRESUPUESTAL) {
		CVE_PRESUPUESTAL = cVEPRESUPUESTAL;
	}

	public String getCVE_SERV_CONTRATADO() {
		return CVE_SERV_CONTRATADO;
	}

	public void setCVE_SERV_CONTRATADO(String cVESERVCONTRATADO) {
		CVE_SERV_CONTRATADO = cVESERVCONTRATADO;
	}

	public String getID_APLICACION() {
		return ID_APLICACION;
	}

	public void setID_APLICACION(String iDAPLICACION) {
		ID_APLICACION = iDAPLICACION;
	}

	public String getRFC_PROVEEDOR() {
		return RFC_PROVEEDOR;
	}

	public void setRFC_PROVEEDOR(String rFCPROVEEDOR) {
		RFC_PROVEEDOR = rFCPROVEEDOR;
	}

	public String getTIPO_MENSAJE() {
		return TIPO_MENSAJE;
	}

	public void setTIPO_MENSAJE(String tIPOMENSAJE) {
		TIPO_MENSAJE = tIPOMENSAJE;
	}

	public String getNUM_CONTRATO() {
		return NUM_CONTRATO;
	}

	public void setNUM_CONTRATO(String nUMCONTRATO) {
		NUM_CONTRATO = nUMCONTRATO;
	}

	public List<String> getErrores() {
		return errores;
	}

	public void setErrores(List<String> errores) {
		this.errores = errores;
	}

	public List<Estudio> getEstudios() {
		return estudios;
	}

	public void setEstudios(List<Estudio> estudios) {
		this.estudios = estudios;
	}

	public Integer getSelectedComponent() {
		return selectedComponent;
	}

	public void setSelectedComponent(Integer selectedComponent) {
		this.selectedComponent = selectedComponent;
	}

	public List<Integer> getIdsEstudios() {
		return idsEstudios;
	}

	public void setIdsEstudios(List<Integer> idsEstudios) {
		this.idsEstudios = idsEstudios;
	}

	public List<Prueba> getPruebas() {
		return pruebas;
	}

	public void setPruebas(List<Prueba> pruebas) {
		this.pruebas = pruebas;
	}

	public int getSeqEstudios() {
		return ++seqEstudios;
	}

	public void setSeqEstudios(int seqEstudios) {
		this.seqEstudios = seqEstudios;
	}

	public String getFECHA_HORA_ATENCION() {
		return FECHA_HORA_ATENCION;
	}

	public void setFECHA_HORA_ATENCION(String fECHAHORAATENCION) {
		FECHA_HORA_ATENCION = fECHAHORAATENCION;
	}

	public void addError(String error) {
		errores.add(error);
	}

	public String getXML() {
		StringBuffer xml = new StringBuffer();
		xml.append("<labUpdate xmlns=\"http://www.openuri.org/\"> \n ");
		xml.append("	<GovTalkMessage xmlns=\"urn:hl7-org:v3\"> \n");
		xml.append("	<EnvelopeVersion>2.0</EnvelopeVersion> \n");
		xml.append("  <Header> \n");
		xml.append("   <MessageDetails> \n");
		xml.append("    <Class>POLB_RM004000</Class> \n");
		xml.append("    <Qualifier>HL7Message</Qualifier> \n");
		xml.append("  	<Function>submit</Function> \n");
		xml.append("	<TransactionID/>");
		xml.append("	<CorrelationID></CorrelationID>");
		xml.append("	<GatewayTimestamp>01:01:01 2011/01/01</GatewayTimestamp>");
		xml.append("   </MessageDetails>");
		xml.append("   <SenderDetails>");
		xml.append("		<SenderIP>11.254.16.122</SenderIP>");
		xml.append("		<Authentication>");
		xml.append("			<Method>clear</Method>");
		xml.append("			<Value/>");
		xml.append("		</Authentication>");
		xml.append("   </SenderDetails>");
		xml.append("   <ReceiverDetails>");
		xml.append("	<SenderIP>11.254.16.122</SenderIP>");
		xml.append("	<Authentication>");
		xml.append("		<Method>clear</Method>");
		xml.append("		<Value/>");
		xml.append("	</Authentication>");
		xml.append("   </ReceiverDetails>");
		xml.append("  </Header>");
		xml.append("	<GovTalkDetails> \n");
		xml.append("		<TargetDetails> \n");
		xml.append("			<Organization>IMSS</Organization> \n");
		xml.append("		</TargetDetails> \n");
		xml.append("	</GovTalkDetails> \n");
		xml.append("	<Body> \n");
		xml.append("<POLB_MT004000 xmlns=\"urn:hl7-org:v3\" xmlns:xsi='http://www.w3.org/2002/XMLSchema-instance' xsi:schemaLocation='urn:hl7-org:v3 POLB_MT004000.xsd'>");
		xml.append("	<id root='2.16.840.1.113883.19.3.2409' extension='"
				+ this.NUM_FOLIO_ORDEN + "' displayable='true'/>");
		xml.append("	<effectiveTime value='" + this.FECHA_HORA_ATENCION + "'/>");
		xml.append("	<reasonCode code='"
				+ this.MOTIVO_ACT
				+ "' codeSystem='2.16.840.1.113883.5.8' codeSystemName='ActReason' displayName='Display name'/>");
		for (Estudio estudio : estudios) {
			xml.append("	<specimen>");
			xml.append("		<exposedEntity>");
			xml.append("		<id root='2.16.840.1.113883.19.3.2409' extension='"
					+ estudio.getCVE_LOINC_ESTUDIO() + "' displayable='true'/>");
			xml.append("		<code code='"
					+ estudio.getEXISTENCIA()
					+ "' codeSystem='2.16.840.1.113883.5.111' codeSystemName='RoleCode' displayName='Display name'/>");
			xml.append("		<statusCode code='" + estudio.getACCION() + "'/>");
			for (Prueba p : estudio.getPruebas()) {
				xml.append("		<exposedMaterial>");
				xml.append("			<id root='2.16.840.1.113883.19.3.2409' extension='"
						+ p.getCVE_LOINC_PRUEBA() + "' displayable='true'/>");
				xml.append("			<existenceTime value='"
						+ p.getFECHA_HORA_ENTREGA() + "'/>");
				xml.append("			<riskCode code='"
						+ p.getTIPO_PROCESAMIENTO()
						+ "' codeSystem='2.16.840.1.113883.5.46' codeSystemName='EntityRisk' displayName='Display name'/>");
				xml.append("		</exposedMaterial>");
			}
			xml.append("		</exposedEntity>");
			xml.append("	</specimen>");
		}
		xml.append("	<recordTarget>");
		xml.append("		<patient>");
		xml.append("			<id root='2.16.840.1.113883.19.3.2409' extension='"
				+ this.cveIdee + "' displayable='true'/>");
		xml.append("		</patient>");
		xml.append("	</recordTarget>");
		xml.append("	<author>");
		xml.append("		<time value='" + this.FECHA_HORA_REG_ACT + "'/>");
		xml.append("		<assignedEntity>");
		xml.append("			<confidentialityCode code='"
				+ this.MAT_ACTUALIZA
				+ "' codeSystem='2.16.840.1.113883.5.25' codeSystemName='Confidentiality' displayName='Display name'/>");
		xml.append("			<assignedPerson>");
		xml.append("				<name use='" + this.NOMBRE_ACTUALIZA + "'>");
		if (this.APELLIDOM_ACTUALIZA != null
				&& !"".equals(this.APELLIDOM_ACTUALIZA)) {
			xml.append("				<given>" + this.APELLIDOM_ACTUALIZA + "</given>");
		}
		xml.append("					<family>" + this.APELLIDOP_ACTUALIZA + "</family>");
		xml.append("				</name>");
		xml.append("			</assignedPerson>");
		xml.append("		</assignedEntity>");
		xml.append("	</author>");
		xml.append("	<dataEntryLocation>");
		xml.append("		<locatedEntity>");
		xml.append("			<locatedPublicInstitution>");
		xml.append("				<code code='"
				+ this.CVE_PRESUPUESTAL
				+ "' codeSystem='2.16.840.1.113883.19.1.16040' codeSystemName='EntityCode'/>");
		xml.append("			</locatedPublicInstitution>");
		xml.append("		</locatedEntity>");
		xml.append("	</dataEntryLocation>");
		xml.append("	<subjectOf>");
		xml.append("		<controlActEvent>");
		xml.append("			<id root='2.16.840.1.113883.19.3.2409' extension='"
				+ this.TIPO_MENSAJE + "' displayable='true'/>");
		xml.append("			<priorityCode code='"
				+ this.CVE_SERV_CONTRATADO
				+ "' codeSystem='2.16.840.1.113883.5.7' codeSystemName='ActPriority' displayName='Display name'/>");
		xml.append("			<confidentialityCode code='"
				+ this.ID_APLICACION
				+ "' codeSystem='2.16.840.1.113883.5.25' codeSystemName='Confidentiality' displayName='Display name'/>");
		xml.append("			<uncertaintyCode code='"
				+ this.NUM_CONTRATO
				+ "' codeSystem='2.16.840.1.113883.5.25' codeSystemName='Confidentiality' displayName='Display name'/>");
		xml.append("			<reasonCode code='"
				+ this.RFC_PROVEEDOR
				+ "' codeSystem='2.16.840.1.113883.5.8' codeSystemName='ActReason' displayName='Display name'/>");
		xml.append("		</controlActEvent>");
		xml.append("	</subjectOf>");
		xml.append("</POLB_MT004000>");
		xml.append("	</Body> \n");
		xml.append("</GovTalkMessage>");
		xml.append("</labUpdate>");
		return xml.toString();
	}
}
